# -*- coding: utf-8 -*-

'''
函数的划分
按照参数类型划分：位置参数、关键字参数、默认参数、参数组
'''

'''
1. 位置参数：是我们在传参的时候，实参传递的顺序按照形参定义的顺序进行传递的传参方式
'''
def func(name,city):
    print('I am %s, I come from %s.'%(name,city))

func('sanery','China')


'''
2. 关键字传参：是我们在传参的时候，以形参等于实参的形式忽略形参定义的顺序进行传参的传参方式
'''
def func2(name,city):
    print('I am %s, I come from %s.'%(name,city))

func2(name='sanery',city='China')
func2(city='China',name='sanery')
func2(name='China',city='sanery')


'''
3. 默认值参数，缺省参数：是在我们定义参数的时候，我们给形参一个默认值，在我们调用函数的时候，
如果不给有默认参数的形参传参，会自动采用默认值。
'''
def func3(city,name = "python"):
    print(city,name)

func3('heyuan')
func3('shenzhen',"golang")


'''
4. 参数组：处理比当初声明时更多的参数，会将传入的参数变成元组（*args）或者字典（**kwargs），
声明的时候不用重命名。
'''

# *args
def func4(*args):
    print(args)

func4()
func4(1)
func4(1,2,3)


# **kwargs
def func5(a,b,c,*d,**e):
    print(a,b,c,d,e)

func5(1,2,3,4,5,6,7,8,aa=1,bb=2,cc=3,dd=4)




